# 函数
# 多返回值，接收的时候可以用多个变量接收
print("-" * 50, "多返回值", "-" * 50)
def someReturn():
    return 1, 2, "qwe"
a, b, c = someReturn()
print(f"返回值分别是{a}，{b}, {c}")

# 多传参
# 1、位置参数
print("-" * 50, "多传参，位置参数", "-" * 50)
def fun_1(name, age):
    print(f"{name}的年龄：{age}")
fun_1("张三", 18)

# 2、关键字参数
print("-" * 50, "多传参，关键字参数", "-" * 50)
# 如果关键字传参和位置参数混用，则关键字参数必须放在后面
def fun_2(name, age, sex):
    print(f"{name}的年龄：{age},性别：{sex}")
fun_2(sex="女", name="嫣然", age=20)
# 示例
def fun_3(name, age, sex):
    print(f"{name}的年龄：{age},性别：{sex}")
fun_3("嫣然",  sex="女孩",age=25)

# 缺省参数：如果不传参数，默认的必须要写到最后面（可以写多个默认，但是必须最后）
print("-" * 50, "多传参，缺省参数", "-" * 50)
def fun_4(name, sex, age=20):
    print(f"{name}的年龄：{age},性别：{sex}")
fun_4("紫嫣","女孩")
def fun_4(name, sex="女孩", age=20):
    print(f"{name}的年龄：{age},性别：{sex}")
fun_4("一萌")

# 不定长传参
print("-" * 50, "多传参，不定长传参", "-" * 50)
# 1、位置不定长传参：会根据传递的参数自动合并成元组类型
def fun_5(*args):
    print(args)
fun_5("嫣然", "女孩", 25)
# 2、关键字不定长传参：传递的是字典类型
def fun_6(**kwargs):
    print(kwargs)
fun_6(name="紫嫣",sex="女孩",age=22)

# 函数作为参数
print("-" * 50, "多传参，函数作为参数", "-" * 50)
def test_func1(cpmpute):
    result = compute(1,2)
    print(result, end="\t")
def compute(x, y):
    return x + y
test_func1(compute)
# 匿名函数（x和y是参数，x+y是返回的值）
test_func1(lambda x, y: x + y)
print()
# 不带返回值lambda
fun_8 = lambda x, y: print(f"不带返回值lambdax:{x},y:{y}")
fun_8(1, 5)
# 不带参数lambda
fun_9 = lambda: print("不带参数lambda")
fun_9()

print("-" * 50, "练习，函数作为参数", "-" * 50)
# 要测试时放开注释
"""
def register():
    print("注册")
def login():
    print("登录")
def user_info():
    print("显示用户信息")
dict_chice ={
    "1": register,
    "2": login,
    "3": user_info
}

choice = input("请输入操作：1、注册 2、登录 3、查看用户信息 ")
fun_7 = dict_chice.get(choice)
if fun_7:
    fun_7()
else:
    print("输入错误")
"""


